define(["../common"], function() {
	var rootTemp = $("<div>").append($("[dt='rootItem']")).html();
	var sonTemp = $("<div>").append($("[dt='sonItem']")).html();
	var hideData = $.parseJSON($("#hideData").html());
	var delId = -1;// 要删除的类目ID
	var formConfig = {
		timely: 0,
		theme: 'yellow_top',
		fields: {
			name: "required"
		},
		valid: addOrEditDo
	};
	var msgboxConfig = {
		type: 'confirm',
	  	initialWidth: 400,
	  	initialHeight: 250,
	  	width: 400,
	  	height: 250,
	  	icons: ['close'],
	  	content: $("#dpxx"),
	  	title: "删除类目",
	  	buttons: ["确定", "取消"],
	  	buttonEvents: {
	  		"确定": function() {
	  			var bakupId = checkBakupId();
	  			if (!bakupId) {
	  				return false;
	  			}
	  			delDo(bakupId);
	  			this.close();
	  		},
	  		"取消": function() {
	  			this.close();
	  		}
	  	}
	};

	initList();
	loadjs(["validator"], function() {
		$("form").validator(formConfig);
	});

	// 事件:行滑过效果
	$(document).on('mouseover', "tr", function() {
		$("tr").removeClass("hover");
		$(this).addClass("hover");
		$(this).find("[dt='ctrl']").show();
	});
	$(document).on('mouseout', "tr", function() {
		$(this).removeClass("hover");
		$(this).find("[dt='ctrl']").hide();
	});
	
	// 事件:展示或收起子类
	$(document).on('click', "[dt='unwind']", function() {
		var $sonItems = $(this).closest("tr").nextUntil("[dt='rootItem']");
		if ($(this).html() === "►") {
			$(this).html("▼");
			$sonItems.show();
		} else {
			$(this).html("►");
			$sonItems.hide();
		}
	});
	
	// 事件:添加父类
	$("[dt='btn1']").click(function() {
		$("#addRootForm").trigger("validate");
	});
	
	// 事件:编辑
	$(document).on('click', "[dt='editBt']", function() {
		// 在进入编辑之前先检查并提交当前在编辑状态的类目后,才能进入目标类目的编辑
		
		var $tr = $(this).closest("tr");
		
		var $preForm = $("[dt='editForm']:visible");
		var $destForm = $tr.find("[dt='editForm']");
		
		$preForm.trigger("validate");
		
		if ($preForm.isValid() && $preForm != $destForm) {
			$tr.find("[dt='name']").hide();
			$tr.find("[dt='editForm']").show().find("[name='name']").focus().select();
		}
		
	});
	
	// 事件:置顶
	$(document).on('click', "[dt='sortBt']", function() {
		sortDo($(this).closest("tr").attr("id").split("_")[1]);
	});
	
	// 事件:删除
	$(document).on('click', "[dt='delBt']", function() {
		delId = $(this).closest("tr").attr("id").split("_")[1];
		
		// 先初始化窗口内容
		var name = $("#item_" + delId).find("[dt='name']").html();
		$("#delName").html(name);
		initSelectClassify();
		
		loadjs(["msgbox"], function() {
			$.msgbox(msgboxConfig);
		});
	});
	
	// 事件:添加子类
	$(document).on('click', "[dt='addBt']", function() {
		$(this).closest("tr").find("[dt='addSonForm']").trigger("validate");
	});
	
	function addOrEditDo(form) {
		var $form = $(form);
		
		$form.showMsg("请稍候...", 'load');
		
		var name = $form.find("[name='name']").val();
		
		$.post(g_firmDomain + "/goodsClassify/addOrEditDo/json", $form.serialize(), function(data) {
			if (data.status !== 0) {
				$form.showMsg(data.message, 'error');
				return;
			}
			
			if ($form.is("[dt='editForm']")) {// 是编辑类
				
				$form.showMsg("编辑成功！", 'pass');
				
				$form.hide();
				$form.next("[dt='name']").html($form.find("[name='name']").val()).show();
				
			} else { // 是添加类
				
				$form.showMsg("添加成功！", 'pass');
				
				var html = rootTemp;// 根类
				if (!$form.is("#addRootForm")) {// 子类
					html = sonTemp;
				}
				
				html = html
					.replace(/\-\{id\}\-/g, data.result)
					.replace(/\-\{name\}\-/g, name);
				$form.closest("tr").after(html);
				
				if ($form.is("#addRootForm")) {// 根类
					
					$form.find("[name='name']").val("");
					
				} else {// 子类
					
					// 编辑
					$form.closest("tr").next().find("[dt='editBt']").click();
				}
				
				// 对新添加到页面的表单初始化验证功能
				$form.closest("tr").next().find("form").validator(formConfig);
			}
		});
	}

	function sortDo(id) {
		if (!$(document).showMsg("置顶中...", 'load', true)) {
			return;
		}
		var $tr = $("#item_" + id);
		var $dest = $tr;// 子类排序(默认认为)
		if ($tr.is("[dt='rootItem']")) {// 根类排序
			$dest = $tr.nextUntil("[dt='rootItem']").addBack();
		} 
		
		$dest.fadeTo(null, 0.1);
		$.post(g_firmDomain + "/goodsClassify/sortDo/json", {classifyId: id}, function(data) {
			if (data.status !== 0) {
				$(document).showMsg(data.message, 'error');
				$dest.fadeTo(null, 1);
				return;
			}
			$(document).showMsg();
			
			if ($tr.is("[dt='rootItem']")) {// 根类排序
			
				$dest.insertAfter("tr:eq(1)");
				
			} else {// 子类排序
		
				$dest.insertBefore($dest.prevUntil("[dt='rootItem']").last());
				
				// 制表符处理
				$dest.find(".r").html("├");
				$dest.nextUntil("[dt='rootItem']").addBack().last().find(".r").html("└");// 最后一个
			}
			$dest.fadeTo(null, 1);
			$dest.trigger('mouseout');
		});
	}

	function delDo(bakupId) {
		if (!$(document).showMsg("删除中...", 'load', true)) {
			return;
		}
		// 默认认为要删除的是子类
		var $dest = $("#item_" + delId);
		// 删除的是父类
		if ($dest.is("[dt='rootItem']")) {
			// 包含其所有子类
			$dest = $dest.nextUntil("[dt='rootItem']").addBack();
		}
		$dest.fadeTo(null, 0.1);
		$.post(g_firmDomain + "/goodsClassify/delDo/json", {delId: delId, bakupId: bakupId}, function(data) {
			if (data.status !== 0) {
				$(document).showMsg(data.message, 'error');
				$dest.fadeTo(null, 1);
				return;
			}
			$(document).showMsg();
			Common.clearSessionStorage();
			// 将上一个子类作为最后一个（制表符表示）
			if($dest.next().is("[dt='rootItem']") && !$dest.prev().is("[dt='rootItem']")) {
				$dest.prev().find(".r").html("└");
			};
			$dest.remove();
		});
	}

	function checkBakupId() {
		var bakupId = $("#delForm").find("option:selected[value!='']:last").val();
		if (!bakupId) {
			$("#delForm").validator("showMsg", $("#delMsg"), {type: "error", msg: "请选择"}); 
			return 0;
		}
		$("#delForm").validator("hideMsg", $("#delMsg"));
		return bakupId;
	}

	function initSelectClassify() {
		$("#selectClassify").empty();
		require(["goodsClassify"], function() {
			$("#selectClassify").goodsClassifyComboBox({
				deep: 0,
				companyId: hideData.companyId,
				onLoad: function($select) {
					// 不显示将要删除的类目
					$select.find("option[value='" + delId + "']").remove();// hide()不兼容ie
				},
				onSelect: function() {
					checkBakupId();
				}
			});
		});
		
	}

	function initList() {
		// 兼容ie 加 r=Math.random()
		$.get(g_domain + "/goodsClassify/listWithSons/json?r=" + Math.random(), {deep: 0, "company.companyId": hideData.companyId}, function(data) {
			if (data.status !== 0) {
				$(document).showMsg(data.message, 'error');
				return;
			}
			var parents = data.result;// goodsClassifies
			if (!parents) {
				return;
			}
			var parent,// goodsClassify
			sons,// goodsClassifies
			son,// goodsClassify
			html;
			for (var i = 0; i< parents.length; i++) {
				parent = parents[i];
				
				html = rootTemp
				.replace(/\-\{id\}\-/g, parent.classifyId)
				.replace(/\-\{name\}\-/g, parent.name);
				$("#list").append(html);
				
				sons = parent.goodsClassifies;
				if (!sons) {
					continue;
				}
				for (var j = 0; j < sons.length; j++) {
					son = sons[j];
					
					html = sonTemp
					.replace(/\-\{id\}\-/g, son.classifyId)
	  				.replace(/\-\{name\}\-/g, son.name);
	  				$("#list").append(html);
				}
				// 最后一个子类的制表符
				$(".r").last().html("└");
			}
			
			loadjs(["validator"], function() {
	    		$("form").validator(formConfig);
	    	});
	    	
		});
	}
});